home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Forever 4
/
Atari Forever 4.zip
/
Atari Forever 4.iso
/
SERIE_AI
/
AI_063
/
EMU_ZX81.ZIP
/
ZX81.TXT
< prev
Wrap
Text File
|
1993-06-18
|
40KB
|
656 lines
Sinclair ZX81 Emulator V2.1
===========================
Vorgeschichte
~~~~~~~~~~~~~
Es war einmal... damals... genauer gesagt achtzig/einenachtzig... in den An-
tennen... als wir noch schwarz/weiß sahen... und als wir noch jung und schön
waren... damals... als alles begann...
... also damals, da gab es eigentlich noch keine Handbücher und README-Dateien
und ich hätte niemals auch nur einen Gedanken daran verschwendet, so eine An-
leitung zu tippen. "Press any key to start" reichte da noch völlig aus. Aber
heutzutage geht es wohl doch nicht mehr ohne. Also noch einmal von vorne...
Wie gesagt, es begann damals, im Jahre 1980. Schon zu dieser Zeit hatten ei-
nige Leute bemerkt, daß die Mikroprozessoren der Firma Intel nichts taugen,
eine neue Firma namens ZILOG gegründet und einen neuen Mikroprozessor namens
"Z80" entworfen. Der Name Z80 kommt allerdings nicht daher, daß dies im Jahre
1980 passiert war, denn da war der Z80 schon vier Jahre alt, sondern weil der
Z80 eine Verbesserung des Mikroprozessors 8080 war und außerdem von ZILOG. Im
Jahr 1980 kam dann ein spleeniger Engländer auf die Idee, daß der Z80 an sich
eigentlich auch nicht so das Gelbe vom Ei wäre, und fügte 1 kByte RAM, 4 kByte
ROM, einen Modulator zum Anschluß eines Fernsehers und eine Folientastatur
hinzu. Einzig im Namengeben war dieser Engländer nicht so erfindungsreich, er
nannte das fertige Gerät einfach "ZX80", was wohl soviel wie "Z80, extended
version" bedeuten sollte. Aber Clive Sinclair, so der Name des ZX80-Erfinders,
wäre nicht Clive Sinclair gewesen, wenn er den ZX80 nicht noch kleiner und
billiger gemacht hätte. Er packte alles, was der ZX80 außer Z80, RAM und ROM
noch brauchte, in ein einziges IC, so daß der fertige Computer nur noch vier
ICs in seinem Inneren hatte. Aus den 4 kByte ROM wurden 8 kByte ROM, in die
Sinclair mit Hilfe einiger englischer Mathematiker das ganze Betriebssystem
und ein brauchbares BASIC stopfte. Das fertige Gerät bekam dann den Namen
"ZX81", weil inzwischen schon ein Jahr vergangen war und Sinclair immer noch
nicht einfallsreicher im Namengeben geworden war.
Warum ich diese Geschichte erzähle? Nun, eben diesen Computer namens ZX81
bildet das beiliegende Programm ZX81.PRG auf dem Atari ST softwaremäßig nach.
Die Geschichte des Atari ST erzähle ich allerdings hier nicht, das kann mal
jemand machen, der einen Atari-Emulator schreibt. Ein Programm, das einen an-
deren Computer nachbildet, nennt man auch einen "Emulator". Somit wäre ge-
klärt, was ein "Sinclair ZX81 Emulator" ist. "V2.1" bedeutet "Version 2.1" und
das wiederum bedeutet, daß der Autor nach der ersten Version immer noch nicht
genug hatte und das Programm weiter perfektioniert hat. Verrückter Kerl.
Nun eine andere Frage. Warum überhaupt ein ZX81-Emulator? Nunja, was soll ich
sagen? Diejenigen, die den ZX81 kennen, wissen warum, und die anderen haben
mit Sicherheit nicht bis hierhin gelesen.
Der ZX81 ist einfach eine Legende. Für einen Computerfreak bedeutet der ZX81
vielleicht das, was die Tin Lizzy für einen alten Auto-Liebhaber bedeutet. Als
mein Bruder und ich ihn 1981 zu Weihnachten geschenkt bekamen, habe ich mich
sofort in das kleine schwarze Kästchen verliebt. Zum Leidwesen meiner Freunde
und Verwandten saß ich Tage und Nächte davor, auf Omas alten Schwarz/Weiß-
Fernseher starrend, auf dem meistens flimmernde schwarz/weiße Streifen hin und
her huschten, die nur ab und an von einer aussagekräftigen Mitteilung wie
"E/0" unterbrochen wurden. Als dann das Buch "Programmierung des Z80" von
Rodnay Zaks dazukam, war meine Begeisterung für den ZX81 nicht mehr zu brem-
sen. Ein Freund von mir war genauso angetan davon und wir machten als Schul-
kinder sogar einen kleinen Handel mit selbstgeschriebenen Programmen auf. Wir
hörten aber schnell wieder damit auf, als wir gemerkt hatten, wie groß die
Nachfrage war und wieviel Arbeit da auf uns zu kam. Schließlich hatten wir
sowieso keine Zeit, das verdiente Geld auszugeben, weil wir ja immer vor dem
"blöden Ding" saßen, wie unsere Eltern den ZX81 nannten. Denn auch an der
Hardware gab es damals viel zu Basteln.
Vielleicht ist an dieser Stelle auch eine kleine Anekdote über besagten
Schulfreund angebracht, ich hoffe er wird es mir verzeihen. Damals hatten wir
nämlich noch keinen Assembler und mußten uns die Codes mühsam aus Rodnay Zaks'
Buch zusammensuchen und dann in den ZX81 "poken". Er hatte es geschafft, ein
mehrere Seiten langes, kompliziertes Assembler-Programm während einiger lang-
weiliger Schulstunden zu schreiben. Was mich dann aber doch verblüfft hat,
war, daß schon alle Maschinensprache-Codes fertig daneben standen. Er muß fast
alle Z80-Opcodes auswendig gekonnt haben. Und das dezimal - die Vorzüge des
Hexadezimalsystems hatte er damals wohl noch nicht eingesehen. Das Programm
ist übrigens heute noch erhalten, es ist das "3D_LABYR.81".
Später habe ich dann doch einen Assembler geschrieben, der ebenfalls noch er-
halten ist, nämlich "ASSEMBLE.81". Aber auch der mußte natürlich erst einmal
per Hand in Maschinencode übersetzt werden.
Die ganze ZX81-Herrlichkeit hielt allerdings nur zwei oder drei Jahre. Dann
kam endlich Ton und Farbe ins Spiel. Von Commodore war nämlich der "C64" er-
schienen, den man, um beim Vergleich mit Autos zu bleiben, als eine Art "VW
Käfer" ansehen kann. Aber auch Clive Sinclair war nicht faul und brachte den
"ZX Spectrum" auf den Markt. Irgendwie hatte er das mit dem Namengeben auch
inzwischen gelernt. Der "Speccy" war zwar in mancher Hinsicht der bessere
Computer, aber der "64er" war wegen seines Soundchips, der vielen kursierenden
Programme und der Aussicht, einmal einen anderen Mikroprozessor als den Z80
malträtieren zu können, noch etwas verlockender. So investierten wir das mit
dem Software-Handel verdiente Geld in einen Commodore 64.
Wieder drei Jahre später erschien dann der Atari ST. Die Farbe war wieder
verschwunden und nun stand auf dem Tisch statt des Fernsehers ein seriöser
Monochrom-Monitor. Und irgendwie keimte da in mir die Idee auf, den alten ZX81
wiederzubeleben. Als dann noch ein CP/M-Emulator für den Atari ST auftauchte,
wurde mir klar, daß es möglich war, den ZX81 originalgetreu auf dem Atari ST
nachzubilden. Das hat mir dann natürlich keine Ruhe mehr gelassen. Nach einer
Woche und einigen neugierigen Blicken in besagten CP/M-Emulator krabbelten die
ersten ZX81-Zeichen über den Atari-Monitor. Aber die Bildschirmausgabe des
ZX81 ohne Videochip war eine harte Nuß, und so dauerte es nochmal eine ganze
Weile, bis ein plötzlich auftauchendes ZX81-ROM-Listing sowie ein Gespräch mit
einem ehemaligen ZX81-Hardware-Experten Licht in diese wirklich genial-ver-
zwickt-sparsame Angelegenheit brachten. Schließlich war die Version 1.0 des
ZX81-Emulators fertig. Leider erlaubte aber die Firma Amstrad nicht, das Pro-
gramm irgendwo zu veröffentlichen. Zwei Jahre später, nachdem der ZX81 auch
von Amstrad nicht mehr verkauft wurde, konnte das Programm dann leicht ver-
bessert als Version 1.1 in der Zeitschrift "TOS" erscheinen.
Ich hatte nicht damit gerechnet, daraufhin soviel "Fan-Post" zu bekommen. Al-
len Schreibern an dieser Stelle herzlichen Dank. Im Laufe der Zeit hatten sich
einige sinnvolle Verbesserungsvorschläge angesammelt, außerdem lief der
ZX81-Emulator auf schnelleren als den Standard-68000-8MHz-Ataris einfach zu
schnell. Als ich dann auf den Atari TT umgestiegen bin, war klar: Es mußte
einfach noch eine Version des ZX81-Emulators geben, die auch mit dem 19-
Zoll-Monitor zurechtkommt. Nur so konnte das Original-ZX81-Feeling wie damals
auf Omas altem Schwarz/Weiß-Fernseher wiederhergestellt werden. Hier ist es
also wieder!
Neuerungen ab der Version 2.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Für diejenigen, die schon Version 1.0 oder 1.1 des ZX81-Emulators kennen und
nur wissen wollen, was sich ab der Version 2.0 geändert hat, hier eine Liste
der wesentlichen Neuerungen:
- Neben der mittleren und hohen ST-Auflösung wird jetzt auch die mittlere und
hohe TT-Auflösung unterstützt.
- Die Geschwindigkeit des ZX81 ist nun für den SLOW- und den FAST-Modus
getrennt einstellbar.
- Das Dunkeltasten des Bildschirms im FAST-Modus kann abgeschaltet werden.
- Der Nummerntasten-Block kann als Hex-Eingabefeld benutzt werden.
- Speicherblöcke im ZX81 können auf Diskette geladen und gespeichert werden.
- Sämtliche Parameter lassen sich in ZX81-Programmen speichern und aus ihnen
laden, so daß Programme stets mit den passenden Parametern verknüpft sind.
- Bei jedem ZX81-Reset können automatisch die Parameter und ein beliebiger
Speicherblock in den ZX81 geladen werden.
- Die Alternate-Taste hat nun eine andere Funktion bekommen: Sie schaltet
nicht mehr auf die Tasten-Belegung mit Shift des Atari um, sondern auf die
normale Tasten-Belegung des Atari. Tasten, die man beim Atari mit Shift
erhält, müssen nun mit Shift-Alternate angesprochen werden. Mit der
CapsLock-Taste kann der Atari-Tasten-Modus jetzt festgeklemmt werden.
- Die Funktionstasten entsprechen jetzt der obersten Zeile der ZX-Tastatur.
- Man kann nun im ZX81 beliebige Dateinamen eingeben, auch mit Pfadangaben
und Wildcards. Der normale Schrägstrich "/" wird dabei in den Backslash "\"
umgewandelt. Dadurch lassen sich beliebige Dateien auch ohne den Umweg über
die Datei-Auswahlbox erreichen.
- Nun sind auch ".", SPACE, SHIFT und NEW LINE als Joystick-Tasten benutzbar.
Man gebe "^" oder "~" für SHIFT und "\" oder "|" für NEW LINE ein.
In der Version 2.1 mußten nochmal einige Kleinigkeiten verbessert werden, z.B.
gab es in den Farbmodi von STEs und TTs einen leichten Grauschleier und das
Dunkeltasten konnte nicht abgeschaltet werden. Ab Version 2.1 sollte es auch
unter Multi-TOS keine Probleme mehr geben. Multitasking ist aber leider "aus
technischen Gründen" trotzdem nicht machbar.
Die ZX81-Programmsammlung konnte dank Andreas Steinbacher nochmal wesentlich
erweitert werden. Es ist schon erstaunlich, wieviele Pacmans, Scrambles, Crazy
Kongs und Froggers damals programmiert worden sind.
Bedienung des ZX81-Emulators
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wie gesagt, dieses Programm emuliert Sinclairs legendären 8-Bit-Homecomputer
ZX81 auf dem Atari ST. Es wird keine weitere Hardwareunterstützung benötigt,
und trotzdem wird fast alles originalgetreu emuliert.
Darunter fällt auch die Tastatur. Da der ZX81 keinen Tastaturpuffer hatte (wer
die Tastatur kennt, weiß auch warum), ist etwas Geduld bei der Eingabe erfor-
derlich. Die Tastaturbelegung entspricht ebenfalls dem Original. Das bedeutet
insbesondere, daß die Tasten Y und Z gegenüber der deutschen Tastatur des
Atari vertauscht sind und die meisten Sonderzeichen woanders liegen. Dieses
Problem wird aber dadurch gemildert, daß erstens über die Help-Taste jederzeit
die Tastaturbelegung des ZX81 angezeigt werden kann, und man zweitens die
Möglichkeit hat, durch gleichzeitiges Drücken der Alternate-Taste die normale
Tastatur-Belegung des Atari zu benutzen. Diesen Atari-Tasten-Modus kann man
mit der CapsLock-Taste auch festklemmen. Da der ZX81 sowieso nur Großbuchsta-
ben kennt, ist die CapsLock-Taste im ZX81 für diesen Zweck frei.
Einige Zeichen auf der Atari-Tastatur kennt der ZX81 nicht. Grundsätzlich gibt
es wie gesagt nur Großbuchstaben. Kleinbuchstaben, Umlaute und Buchstaben mit
Akzenten werden durch den jeweiligen großen Grundbuchstaben ersetzt. Die wei-
teren Ersetzungen sind in der folgenden Tabelle aufgeschlüsselt:
Atari ST ZX81
--------------------------------
\ /
^ **
' und ` "
[ und ] < und >
{ und } ( und )
# und + £
@ C (AT)
! und ~ N (NOT)
& SHIFT 2 (AND)
| SHIFT W (OR)
Shift SHIFT
Control FUNCTION
Insert GRAPHICS
Delete RUBOUT
Backspace RUBOUT
Esc, Tab EDIT
Leertaste SPACE
Return NEW LINE
Clr Home V (CLS)
Neben dem Anzeigen der Tastaturbelegung mit der Help-Taste steht jederzeit ein
anderes Hilfsmittel über die Undo-Taste zur Verfügung, nämlich die Emulator-
Kontrollbox. Zu den Einstellungen in dieser Dialogbox im Einzelnen:
Neben dem Symbol "Power Pack" kann man dem Speicherausbau wählen. Standard war
hier wohl eine 16-kByte-Erweiterung. Nach einem Wechsel der Speichergröße ist
ein Reset erforderlich. Der Ausbau auf 48 kByte ist allerdings mit Vorsicht zu
genießen. Hier wird einfach RAMTOP auf das Ende des 64 kByte Adressraums ge-
setzt, erhält also den Wert 0. Abgesehen davon, daß der ZX81 hier natürlich
einen positiven Wert erwartet, kann in den oberen 32 kByte eigentlich auch von
der ZX81-Hardware kein RAM adressiert werden.
Naben dem Joystick-Symbol kann man den 4 Richtungen und dem Feuerknopf des
Joysticks in Port 2 jeweils eine Taste des ZX81 zuordnen. Als Joystick-Tasten
sind alle 40 Grund-Tasten des ZX81 zugelassen, also "0" bis "9", "A" bis "Z",
".", " " für SPACE, "^" oder "~" für SHIFT und "\" oder "|" für NEW LINE.
Mit den Knöpfen neben dem Symbol "Keypad" kann man die Belegung des Nummern-
tasten-Blocks wählen, "Num" steht für die Standard-Belegung mit Zahlen und
Rechensymbolen, bei "Hex" werden statt der Rechensymbole die Buchstaben "A"
bis "F" zur Eingabe von Hexadezimalwerten verwendet und bei "Cur" werden die
Tasten 2, 4, 6 und 8 als Cursortasten verwendet. Diese Belegung des Nummern-
tasten-Blocks gilt natürlich nur für den ZX81-Tasten-Modus, im Atari-Tasten-
Modus mit Alternate oder CapsLock gilt die Standardbelegung.
Darunter befindet sich ein Knopf, der mit "Black out" beschriftet ist. Hiermit
kann man wählen, ob im FAST-Modus des ZX81 der Bildschirm wie beim Original,
während der Computer arbeitet, dunkelgeschaltet werden soll oder ob er einfach
stehen bleiben soll. Das nervige Geblinke entfällt dann.
Rechts daneben befinden sich zwei "Regler", die mit SLOW und FAST beschriftet
sind. Damit läßt sich die Geschwindigkeit des ZX81 im SLOW- bzw. FAST-Modus
einstellen. Die Regler sollten normalerweise ganz oben stehen, dann ist die
Emulation "so schnell es geht". Bei einem Standard-68000-8MHz-Atari ist dann
der SLOW-Modus etwa gleich schnell wie beim Original, während der ZX81 im
FAST-Modus dem Atari davonläuft. Dieses unterschiedliche Verhalten rührt da-
her, daß der ZX81 im SLOW-Modus durch den Bildschirmaufbau, den der Z80 zum
größten Teil selbst erledigen muß, sehr stark abgebremst wird. Der Atari mit
seiner Video-Hardware hat hier eindeutig die besseren Karten. Im FAST-Modus,
wo es nur auf die Rechenleistung der CPU ankommt, wird hingegen der Atari
durch die Emulation eines fremden Prozessors stark gebremst. Bei schnelleren
als den Standard-68000-8MHz-Ataris laufen die ZX81-Programme im SLOW-Modus
jedoch zu schnell ab, was besonders bei Spielen fatal ist. Hier muß der Regler
für den SLOW-Modus heruntergeschoben werden. Im FAST-Modus kann das kaum pas-
sieren, und wäre auch normalerweise kein Nachteil. Der Regler für den FAST-
Modus kann also eigentlich immer am oberen Anschlag stehen.
Rechts oben befindet sich ein "Memory Block" titulierter Kasten mit den beiden
Knöpfen "Load" und "Save". Hiermit kann man einen Speicherblock im Adressraum
des ZX81 laden oder speichern, nachdem man unter "Start ..." und "Bytes ..."
den Anfang und die Länge des Blocks eingegeben hat.
Die Knöpfe "ZX81 Break" und "ZX81 Reset" bewirken genau das, was draufsteht,
nämlich einen Abbruch des laufenden ZX81-Programms oder einen Reset des ZX81.
Mit "Quit Emulator" kann der Emulator verlassen werden.
Mit den Knöpfen "Load Parameters" und "Save Parameters" können die Emulator-
Einstellungen auch geladen und abgespeichert werden. Dies geschieht immer aus
oder in ein vorhandenes ZX81-Programm. Die Programme sind so immer gleich mit
den richtigen Einstellungen verknüpft. Die Programme bleiben auch nach Spei-
chern der Parameter ZX81-kompatibel, da die Parameter im ungenutzten Drucker-
puffer in den Systemvariablen gespeichert werden.
Findet der ZX81-Emulator bei einem Reset ein ZX81-Programm namens "ZX81.INF",
so werden dessen Parameter automatisch geladen. Findet er einen Speicherblock
namens "ZX81.MEM", so wird auch dieser geladen. Die Parameter werden dabei
zuerst geladen und können so die Adresse bestimmen, an die der Speicherblock
geladen wird. Eine denkbare Anwendung dafür ist das Laden eines anderen Zei-
chensatzes als Block von $0200 Bytes ab der Adresse $1E00 im ZX81-Speicher.
Die Z80-Emulation
~~~~~~~~~~~~~~~~~
Das Kernstück im ZX81-Emulator ist natürlich die Emulation des Z80-Prozessors.
Damit aber auch auf den schon mehrfach zitierten Standard-68000-8MHz-Ataris
zumindest im SLOW-Modus die originale ZX81-Geschwindigkeit erreicht werden
konnte, wurden dabei u.a. folgende Abstriche gemacht:
Der Z80-Stack wird auf Motorola-Art behandelt. Die beiden Bytes von Adressen
werden also auf dem Stack vertauscht abgelegt. Außerdem kommt es dadurch auf
Ataris mit 68000 zu Problemen bei einer ungeraden Adresse des Stackpointers.
H- und N-Flag werden nicht gesetzt, insbesondere funktioniert der Z80-Befehl
"daa" dadurch nicht korrekt. Die Paritätsfunktion des P/V-Flags wird nicht
emuliert. Nur bei zwei Z80-Befehlen wird das Schreiben in den ROM-Bereich
verboten, weil sich das ZX81-8K-ROM damit sonst selber löschen würde. Generell
kann man sagen, daß mindestens alle Funktionen, die vom ZX81-ROM benutzt wer-
den, korrekt emuliert werden.
Das Cassetten-Interface
~~~~~~~~~~~~~~~~~~~~~~~
Als Tribut an den Fortschritt der Technik wurde das berühmt-berüchtigte Cas-
setteninterface ersetzt durch die Möglichkeit, Programme von Diskette zu laden
oder auf Diskette zu speichern. Man kann natürlich auch eine Harddisk oder
RAM-Disk oder ein anderes Laufwerk verwenden, auf das man mit dem TOS-Datei-
system zugreifen kann. Die Zeiten ausgedehnter Kaffeepausen oder Waldspazier-
gänge, nach deren Ende man feststellte, daß der Lautstärkeregler eine Prise
niedriger gedreht werden mußte, sind damit leider unwiederbringlich verloren.
Es sei denn, man möchte seine alten ZX81-Programme auf Diskette überspielen.
Dazu mehr unter "Häufig gestellte Fragen". Man lädt Programme von Disk mit
LOAD "programmname" oder einfach mit LOAD "". Im letzten Fall erscheint dann
die Datei-Auswahl-Box. Speichern geht genauso, nur mit SAVE statt LOAD. Die
Programme sollten die Endung ".81" haben. Beim Eingeben der Programmnamen im
ZX81 ist zu beachten, daß die Zeichen "?", "*", ":", "/" und "." beim Atari im
Gegensatz zum ZX81 eine besondere Bedeutung haben. Die Dateinamen dürfen bis
zu 250 Zeichen lang sein, obwohl bei den bisher gebräuchlichen TOS-Versionen
der Name nach 8 Zeichen abgeschnitten wird. Falls keine andere Datei-Endung
angegeben ist, wird ".81" angehängt, und falls keine Pfadangaben gemacht sind,
wird der aktuelle Zugriffspfad verwendet, mit dem der ZX81-Emulator gestartet
wurde. Beim ZX81 werden die Variablen und der Bildschirminhalt übrigens
grundsätzlich mit abgespeichert.
Der ZX81-Drucker
~~~~~~~~~~~~~~~~
Der ZX81-Drucker wird nicht emuliert. Die Befehle LPRINT und LLIST führen zu
einer entsprechenden Fehlermeldung. Bildschirm-Hardcopys über Alternate/Help
oder COPY sind allerdings möglich.
Kleine Kostprobe gefällig?
~~~~~~~~~~~~~~~~~~~~~~~~~~
Wie, Sie haben keine Lust mehr, diese Anleitung weiterzulesen oder das ZX81-
Handbuch aus dem Keller zu holen und wollen den ZX81-Emulator jetzt einfach
direkt ausprobieren? Na gut.
Nach dem Starten des Emulators und Drücken des Knopfes "GO ZX81" sehen Sie
erst einmal eine kleine Weile gar nichts, weil der ZX81 ja erstmal einen or-
dentlichen Reset durchführen und alles initialisieren muß. Danach erscheint
links unten ein invertiertes K, welches den Eingabe-Cursor darstellt. Der ZX81
wartet also nun auf Ihre Eingabe. Der Buchstabe K bedeutet, daß genauer gesagt
auf ein BASIC-Kommando gewartet wird. Beim ZX81 muß man nun nicht mühselig
LOAD oder LIST Buchstabe für Buchstabe eingeben, sondern es genügt ein Ta-
stendruck. Meist ist es der Anfangsbuchstabe des Kommandos, oder eine Taste in
der Nähe davon. Im Falle von LOAD ist es die Taste "J". Man kann dies aber
jederzeit nach Druck auf die Help-Taste selbst herausfinden. Versuchen Sie
also mal, das Programm "Crazy Kong" mit dem Befehl LOAD "KONG" zu laden. Sie
tippen ein "J", daraufhin erscheint das Kommando LOAD und der Cursor wechselt
von einem invertierten K zu einem invertierten L. Damit wird angezeigt, daß
der ZX81 nun auf die Parameter des Kommandos wartet, also auf das "KONG". Die
beiden Gänsefüßchen erreichen sie entweder mit der Kombination Shift-"P" (wie
beim ZX81) oder, wenn Sie dabei noch Alternate gedrückt halten oder CapsLock
aktiviert haben, mit der Kombination Shift-"2" (wie beim Atari). Noch einfa-
cher kann man die Gänsefüßchen mit der Hochkomma-Taste erreichen, denn da der
ZX81 kein Hochkomma hatte, ist es im Emulator kurzerhand durch die Gänsefüß-
chen ersetzt worden. Wenn Sie sich vertippt haben, können Sie die Eingabe je-
derzeit mit den Cursortasten und Backspace korrigieren. Das geht alles etwas
schwerfällig, weil der ZX81 keinen Tastaturpuffer hatte, aber so war das eben
damals. Zum Schluß drücken Sie die Return-Taste, die der Taste "NEW LINE" beim
ZX81 entspricht und das LOAD-Kommando ausführt. Falls sich auf dem Datei-Zu-
griffspfad, mit dem der Emulator gestartet wurde, nun das Programm "KONG.81"
befindet, und das sollte eigentlich so sein, erhalten Sie die Rückmeldung
"0/0", die bedeutet, daß das LOAD-Programm ordnungsgemäß ausgeführt wurde. Die
erste Null steht für "OK", und die zweite für Programmzeile 0, das ist die
Zeile für Direkt-Eingabe, in der Sie gerade getippt haben. Andernfalls erhal-
ten Sie etwa die Fehlermeldung "E/0". In diesem Fall können Sie z.B. versu-
chen, das Programm "Crazy Kong" mit dem Kommando LOAD "" über die Datei-Aus-
wahlbox des TOS zu suchen. Einige Programme starten sich nach dem Laden von
selbst. Da dies bei "KONG" offensichtlich nicht der Fall ist, müssen Sie noch
den Befehl RUN eingeben, was mit einem Druck auf die Taste "R" getan ist, und
ihn mit der Return-Taste ausführen lassen. Ich habe das Programm "KONG" ge-
wählt, weil es eine kurze Erklärung anzeigt, was bei ZX81-Programmen sonst
meist nicht der Fall ist. Man kann das Programm übrigens auch mit dem Joystick
in Port 2 bedienen. Nur die Leertaste darf man nicht drücken, denn das bewirkt
beim ZX81 ein BREAK, also einen Abbruch des laufenden Programms.
Das leidige Thema
~~~~~~~~~~~~~~~~~
Dies ist normalerweise das Thema "Shareware-Gebühr". Aber hier haben Sie Glück
gehabt. Der ZX81-Emulator ist völlig umsonst, "für lau", wie man bei mir zu
Hause sagt, "für umme", wie man hier in Heidelberg sagt oder "Freeware", wie
der Computerfreak sagt. Sie dürfen ihn, soweit Sie dies privat und nicht auf
kommerzieller Basis betreiben, nach Belieben weiterkopieren. Das setzt aber
voraus, daß Sie alle dazugehörigen Dateien, also den Emulator an sich, die
Anleitungstexte und auch die ZX81-Programme nicht ändern. Sie können natürlich
nach Belieben Texte oder Programme hinzufügen, aber bitte lassen Sie die vor-
handenen Dateien so, wie sie sind. Vorsorglich weise ich an dieser Stelle auch
darauf hin, daß das Copyright der im ZX81-Emulator eingebauten ROM-Software
wahrscheinlich bei Amstrad, auf jeden Fall nicht bei mir liegt, und daß ich
irgendwelche Copyright-Verletzungen beim Kopieren des Emulators nicht auf
meine Kappe nehme. Ich denke aber, das sollte heute kein Thema mehr sein.
Mit PD-Versendern und anderen Anbietern, die PD- bzw. Freeware verkaufen, habe
ich bisher leider nur schlechte Erfahrungen gemacht. Oft werden veraltete oder
fehlerhaft kopierte Versionen in Umlauf gebracht, der PD-Versand verdient
trotzdem daran, aber der arme Programmautor muß die ganzen Fehlermeldungen
beantworten. PD-Versender und sonstige kommerzielle Anbieter bitte ich also,
mich von der Aufnahme meiner Programme in ihr Angebot zu benachrichtigen und
eine Sonderspende locker zu machen. Meine Anschrift:
Christoph Zwerschke
Am Steinfeld 4, D-59379 Selm-Cappenberg, Germany
Häufig gestellte Fragen
~~~~~~~~~~~~~~~~~~~~~~~
Erfahrungsgemäß wurden einige Fragen zum ZX81-Emulator immer wieder gestellt,
weswegen ich versuche, sie hier direkt in der Anleitung zu beantworten:
F: Gibt es noch andere ZX81-Freaks außer mir?
A: Die gibt es in der Tat immer noch, z.B. im "ZX-Team", das sogar eine
regelmäßige Zeitschrift namens "ZX-TEAM-Magazin" herausgibt. Hier die
Kontaktadresse für das "ZX-Team":
Joachim Merkl
Bernbacher Str. 12, D-90768 Fürth, Germany
F: Wie bekomme ich meine alten ZX81-Programme von Cassette auf Diskette?
A: Das ist wirklich ein Problem. Ich hatte seinerzeit bereits ein Programm
namens "ZX81-Utility" geschrieben, mit dem man die Programme von der
"Datasette" oder einem normalen Cassettenrecorder über den Userport in den
Commodore 64 laden und dort auf Diskette oder im C64-Format auf Cassette
archivieren konnte. Deswegen hatte ich meine ZX81-Programme schon auf
Disketten für den Commodore 64 und von dort zum Atari ST war es über die
RS232-Schnittstelle nur noch ein "Katzensprung". Das Programm auf dem
Commodore 64 konnte übrigens noch mehr, z.B. die Programme wieder zurück
zum ZX81 schicken, saubere ZX81-Listings und HEX-Dumps ausdrucken und die
Programme in C64-BASIC umwandeln. Es wurde damals in der Zeitschrift "Happy
Computer" abgedruckt. Ich habe mir dann natürlich auf dem Atari ST nicht
noch einmal die gleiche Arbeit gemacht und deswegen gibt es bis heute kein
brauchbares Atari-Programm dafür. Ich sehe also nur folgende drei
Möglichkeiten: Erstens, Sie organisieren sich einen Commodore 64 oder 128,
das "ZX81-Utility" und verbinden den Commodore irgendwie mit dem Atari ST,
zweitens, Sie organisieren sich ein RS232-Interface für den ZX81 oder
verbinden ihn irgendwie anders direkt mit dem ST oder drittens, Sie
schreiben selbst ein Programm für den Atari ST, das Daten von Cassette
laden kann. Vielleicht kann Ihnen dabei auch
Thomas Busse
Mainzer Str. 29, D-42119 Wuppertal, Germany
helfen, wenn Sie ihn freundlich fragen und Rückporto beilegen, weil er mit
dem Laden und Speichern von ZX81-Cassetten auf dem Atari ST bereits
experimentiert hat.
F: Was ist mit HRG (High Resolution Graphic)?
A: Dafür gab es so viele unterschiedliche Lösungen, einige rein softwaremäßig,
andere mit Hardwareunterstützung, daß der Emulator unmöglich alle
berücksichtigen kann. Dafür kann man den eingebauten Character-Generator
modifizieren und ihn an beliebige Adressen legen.
F: Was ist mit Sound?
A: Hier gilt das gleiche wie für die vorige Frage. Ich glaube, es gab sogar
eine Zusatzhardware mit dem gleichen Soundchip, wie ihn der Atari ST
eingebaut hat, die müßte natürlich sehr einfach zu emulieren sein. Ich habe
aber keine Unterlagen und Software dafür.
F: Kann man auch andere ROMs als das 8K-BASIC-ROM verwenden, z.B. das
ASZMIC-ROM oder das INTEGER-BASIC, FORTH, ASDIS?
A: Ab der Version 2.0 des Emulators kann man Speicherblöcke laden, z.B. in den
Bereich $2000-$4000. Nur werden die meisten Zusatz- oder gar Ersatz-ROMs
nicht laufen, weil sie oft HRG oder einen anderen Bildschirmaufbau
verwenden, eigene LOAD/SAVE-Routinen haben, die auf dem Atari nicht mehr
funktionieren können und wegen ähnlicher Probleme. Aber Sie können ja
einfach mal experimentieren.
F: Warum werden bei den Joystick-Tasten die Buchstaben "Y" und "Z" vertauscht?
A: Die Joystick-Tasten beziehen sich auf die ZX81-Tastatur, bei der gegenüber
einer deutschen Atari-Tastatur die Tasten Y und Z vertauscht sind.
F: Warum wird bei mir regelmäßig ein bestimmter Buchstabe auf den Bildschirm
geschrieben, obwohl ich nicht auf die Tastatur drücke?
A: Entweder kommt der ZX81-Emulator nicht mit Ihrer TOS-Version zurecht, oder
Sie haben eine Hardware am Joystick-Port 2 angeschlossen, zum Beispiel ein
Uhren-Modul. Löschen Sie dann einfach die Tasten für den Joystick mit der
Emulator-Kontrollbox.
F: Gibt es auch schon einen ZX-Spectrum-Emulator?
A: Ich habe sehr viele Anfragen bekommen, ob ich nicht auch einen Emulator für
den ZX-Spectrum schreiben wollte. Aber weil ich, wie bereits lang und breit
erzählt, seinerzeit den Commodore 64 dem ZX-Spectrum vorgezogen habe, kenne
ich mich mit dem "Speccy" nicht so gut aus und die Motivation dafür war
auch einfach nicht da. Außerdem war der ZX81-Emulator wirklich schon genug
Arbeit, weshalb ich zu einem ZX-Spectrum-Emulator nicht überredet werden
konnte. Das war aber auch gut so, denn es gibt inzwischen (mindestens) drei
verschiedene ZX-Spectrum-Emulatoren, die anscheinend unabhängig voneinander
entstanden sind. Anfragen dazu richte man bitte an folgende Adressen:
Jörg Tochtenhagen
Am Schlehdorn 12, D-50189 Elsdorf-Heppendorf, Germany
Hansjörg Oppermann
Rennelbergstr. 15, D-38114 Braunschweig, Germany
Christian Gandler
Paletzgasse 17/3/14, A-1160 Wien, Austria
Alle drei Programme sind "Public Domain". Besonders gut gefällt mir der
ZX-Spectrum-Emulator von Christian Gandler. Bei Anfragen aber bitte den
frankierten Rückumschlag nicht vergessen.
F: Und was ist mit einem Emulator für den Sinclair QL?
A: Den Sinclair QL kenne ich nur vom Hörensagen. Aber ich weiß, daß es
(mindestens) einen Sinclair-QL-Emulator gibt. Der benötigt aber zusätzliche
Hardware und ist nicht "Public Domain". Informationen dazu gibt es bei:
Jochen Merz
Im Stillen Winkel 12, D-47169 Duisburg 11, Germany
F: Wann hört diese Anleitung endlich auf?
A: Wir haben es bald geschafft, jetzt kommt nur noch der Anhang.
Anhang: Kurzanleitung zu einigen ZX81-Programmen
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Nochmal die Bemerkung: ZX81-Programme zeichnen sich dadurch aus, daß sie ohne
Anleitung erscheinen. Die mitgelieferten Programme funktionieren alle mit dem
Emulator. Die Aufforderung "Press any key to continue" sollte man aber nicht
ganz wörtlich nehmen, denn die Leertaste bewirkt beim ZX81 einen Abbruch des
laufenden Programms.
Disassembler DISASSEM.81
------------------------
Der Disassembler befindet sich in den oberen 1,7 kByte des 16K-Speichers und
ist vor NEW geschützt. Sie können auch beliebig andere Programme laden, ohne
daß er gelöscht wird. Nach dem Laden erscheint das berühmte "Press any key".
Wenn Sie jetzt eine Taste außer der Leertaste drücken, wird der Disassembler
automatisch oberhalb RAMTOP geladen und ein NEW ausgeführt. Die Startadresse
zum disassemblieren muß mit POKE in die Adressen 32704 (Low-Byte) und 32705
(High-Byte) geschrieben werden. Danach kann mit RAND USR 32032 jeweils eine
neue Bildschirmseite lang disassembliert werden. Wollen Sie zum Beispiel die
Zeichen-Ausgabe-Routine im 8K-BASIC-ROM bei $07F1 untersuchen, dann geben Sie
ein: POKE 32704,241 (=$F1) und POKE 32705,7 (=$07) und danach RAND USR 32032.
Wenn Sie die nächste Seite sehen wollen, brauchen Sie jetzt nur nochmal RAND
USR 32032 einzugeben.
Assembler ASSEMBLE.81
---------------------
Der Assembler befindet sich in den oberen 2,6 kByte des 16K-Speichers und ist
vor NEW geschützt. Er versteht die Standard ZILOG-Mnemonics. Sie werden wie
ein BASIC-Programm in REM-Zeilen eingegeben. Innerhalb einer Zeile können
mehrere Assemblerbefehle stehen, wenn sie durch ein Semikolon getrennt sind.
Der Assembler unterscheidet zwischen Konstanten und Labels. Sie bestehen aus
Buchstaben und Ziffern (Leerzeichen ignoriert), das erste Zeichen muß ein
Buchstabe sein, die Länge ist beliebig. Labels werden durch einen Doppelpunkt
hinter dem Label gekennzeichnet. Als Operatoren sind "", $, +, -, >, und <
erlaubt. > und < stehen hinter einem numerischen Wert und bilden das
höherwertige bzw. niederwertige Byte.
Pseudo-Befehle:
ORG a1,a2 Das Programm wird ab der Adresse a1 in den Speicher ge-
schrieben. Es wird dabei so assembliert, als ob es bei
der Adresse a2 stünde. Fehlt a2, wird a2=a1 angenommen.
BEGIN Zeigt den Beginn des Assembler-Programms an.
END Zeigt das Ende des Assembler-Programms an.
DEF Bindet die folgende durch Leerzeichen getrennte Liste
von Termen in das Assembler-Programm ein.
= Weist einer Konstanten einen 16bit-Wert zu.
* Die folgenden Zeichen werden als Kommentar aufgefaßt.
Fehlermeldungen:
1 Kein Programm oder kein BEGIN
2 Syntax Error oder Bereichsüberschreitung
3 relativer Sprung zu weit
4 Konstante zweimal definiert
5 Label zweimal definiert
6 Fehler in einer DEF-Anweisung
Der Assembler wird mit dem Befehl PRINT USR 30195 gestartet. Normalerweise
wird der Code in eine REM-Zeile am Anfang des BASIC-Speichers assembliert. Mit
PRINT USR 30113 kann dann zum Löschen des Quellprogramms die momentane Zeile
bis zu der Zeile mit dem END-Befehl verlängert werden.
Ein Beispiel: Angenommen, Sie wollen das Programm ASSDEMO1 assemblieren, das
dem Emulator beiliegt (es malt einfach den Bildschirm voller A's). Dann laden
Sie natürlich zuerst ASSEMBLE. Der Assembler ist nun resident im oberen
Speicherbereich. Laden Sie dann ASSDEMO1 (oder tippen Sie ein eigenes Programm
ein). Die Zeile 10 bewirkt, daß ab Adresse 25000 assembliert wird. Rufen Sie
den Assembler mit PRINT USR 30195 auf. Das Programm ist nun assembliert und
kann testweise mit RAND USR 25000 aufgerufen werden. Wenn man den Code nun wie
ein BASIC-Programm speichern will, muß man ihn in eine REM-Zeile schreiben.
Nach dem Assemblieren erscheint die Zahl 18. Das bedeutet, daß der Code eine
Länge von 18 Bytes hat. Geben Sie also eine Zeile 1 ein, die mindestens 18
Bytes lang ist, also z.B. einfach aus REM und 18 Punkten besteht. Ändern Sie
nun ORG 25000 in Zeile 10 um in ORG 16514, das ist die Startadresse der Zeile
1. Starten Sie den Assembler wieder mit PRINT USR 30195. Der Code steht nun in
der REM-Zeile 1 und erscheint beim Auflisten als wirre Folge von Zeichen. Er
kann mit RAND USR 16514 aufgerufen werden. Ist das Programm fehlerfrei, dann
kann der Quelltext gelöscht werden, da er nicht mehr gebraucht wird (man
sollte ihn natürlich trotzdem vorher mit SAVE speichern). Er kann z.B. durch
die Zeile 10 LET L=USR 16514 ersetzt werden. Damit das Löschen des Quelltextes
nicht so mühsam ist, habe ich eine kleine Zusatzfunktion zum Assembler
hinzugefügt: Tippen Sie LIST 10 und dann PRINT USR 30113. Nun ist die Zeile 10
effektiv bis zur letzten END-Zeile 160 verlängert worden. Dies kann man zwar
nicht sehen, aber wenn man einfach eintippt 10 NEW LINE, dann ist der gesamte
Quelltext gelöscht, und man hat nur noch die Zeile 1 mit dem Code, die man
dann zusammen mit der Zeile 10 LET L=USR 16514 als lauffähiges und kurzes
Programm speichern kann.
Basic-Compiler ZX_GT.81
-----------------------
ZX GT ist ein schneller BASIC-Compiler, der allerdings auf Integer-Arithmetik
beschränkt ist. Er wird mit PRINT USR 17389 aufgerufen, wenn der Code in
REM-Zeile 2 geschrieben werden soll, sonst PRINT USR 17381. Ausgeführt wird
das compilierte Programm dann mit PRINT USR 18823.
Mit dem ZX_GT kenne ich mich auch nicht so gut aus. Dieser Compiler war ein
Projekt in einem englischen Computermagazin. Ich habe ihn daraus eingetippt,
weiß aber gar nicht mehr, welche Zeitschrift das war und ob es die letzte
Ausbaustufe war. Einige Befehle funktionieren mit dem Compiler nicht, und er
kann nur mit ganzen Zahlen rechnen. Wieder ein kurzes Beispiel:
Zuerst wird ZX_GT geladen. Dann gibt man das BASIC-Programm ein, z.B.
10 LET I=1, 20 PRINT I, 30 LET I=I+1, 40 GOTO 20, 50 STOP.
Leider wird bei der Eingabe immer nur die Zeile 0 aufgelistet, ich weiß nicht
ob das so sein muß oder ob man das ändern kann. Danach speichert man das
Programm sicherheitshalber ab und tippt dann PRINT USR 17389. Das Programm
wird nun in zwei Durchläufen kompiliert. Zum Scrollen eine beliebige Taste
drücken (es erscheint ein Fragezeichen). Der Compiler hat nun die ominöse
Zeile 2 fabriziert und dort das kompilierte Programm gespeichert. Man kann es
mit PRINT USR 18823 aufrufen. Funktioniert alles, dann kann man eigentlich das
gesamte BASIC-Programm durch eine Zeile 10 PRINT USR 18823 ersetzen.
Der Compiler hat zumindest in der Version, die ich abgetippt habe, anscheinend
einige Tücken, stürzt häufiger ab, oder bringt die Tastatur durcheinander.
Manchmal hilft ein "ZX81 Break" in der Emulator-Kontrollbox.
Das Ende der Anleitung
~~~~~~~~~~~~~~~~~~~~~~
So, das war's eigentlich. Um den ZX81-Emulator richtig einsetzen zu können,
braucht man natürlich noch das ZX81-Handbuch. Das war, soweit ich mich
erinnern kann, wirklich sehr gut gemacht, und man konnte damit sehr schön
BASIC und Programmieren überhaupt daraus lernen. Auch das ZX81-BASIC an sich
war in vielen Punkten auch gar nicht so schlecht, zum Beispiel unterstützte es
beliebig lange Variablen- und Dateinamen, worauf man erst heute wieder langsam
zurückkommt. Es hatte auch viel mehr mathematische Funktionen eingebaut als
bei anderen BASICs üblich. Das nur als Tip, falls Sie das ZX81-Handbuch
irgendwo bekommen können oder noch selber haben und jemand BASIC lernen
möchte. Mit der ZX81-Emulation auf dem Atari gibt es ja jetzt auch nicht mehr
die Probleme mit der Folientastatur und dem Cassetteninterface und anderen
Widrigkeiten des ZX81. Damals hätte ein ZX81-Benutzer nicht zu träumen gewagt,
daß er an seinen Rechner einmal eine "normale" Tastatur, einen Joystick,
Floppylaufwerke, Festplatten, RAM-Disks, Wechselplatten, einen 19-Zoll-Monitor
usw. anschließen könnte.
Tja, aber so sind wir Computerfreaks (oder Menschen allgemein) nun mal. Zuerst
wünschen wir uns das Zeug sehnlichst herbei und dann ist es auf einmal
selbstverständlich und wir wollen noch mehr. Aber bevor ich nun anfange,
darüber weiter zu philosophieren, verabschiede ich mich und wünsche Ihnen viel
Spaß mit dem ZX81-Emulator.
Christoph Zwerschke 18. Juni 1993